package com.maodou.android.data.remote

import com.maodou.android.data.model.AccountAuthInfo
import com.maodou.android.data.model.AccountCheckResp
import com.maodou.android.data.model.ContactInfoVo
import com.maodou.android.data.model.CreateUserRequest
import com.maodou.android.data.model.EmailCodeResult
import com.maodou.android.data.model.EmailRegisterParams
import com.maodou.android.data.model.ProxyCheckResp
import com.maodou.android.data.model.TwofaCodeResp
import com.maodou.android.data.model.User
import com.maodou.core.model.UserInfo
import com.maodou.core.network.ApiEnvelope
import okhttp3.ResponseBody
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
import retrofit2.http.Query
import retrofit2.http.Streaming
import retrofit2.http.Url

interface ApiService {

    // 用户登录
    @POST("/api/user/login")
    suspend fun onUserLogin(@Body params: Map<String,String>): ApiEnvelope<UserInfo>

    // 获取验证码
    @POST("/api/user/sendActivateEmail")
    suspend fun getActivateEmail(@Body params: Map<String,String>): ApiEnvelope<EmailCodeResult>

    // 注册
    @POST("/api/user/registerByEmail")
    suspend fun onUserRegister(@Body params: EmailRegisterParams): ApiEnvelope<UserInfo>

    // 检查账号存活
    @POST("/api/account/checkLive")
    suspend fun onAccountCheck(@Body params: Map<String, String>): ApiEnvelope<AccountCheckResp>

    // 获取2FA验证码
    @GET("/api/toolkit/2fa")
    suspend fun getTwoFaCode(@Query("key") params: String): ApiEnvelope<TwofaCodeResp>

    // 获取联系方式
    @GET("/api/feedback/getContactInfo")
    suspend fun getContactInfo(): ApiEnvelope<List<ContactInfoVo>>

    // 用户提交反馈信息
    @POST("/api/feedback/create")
    suspend fun onCreateFeedback(@Body params: Map<String, String>): ApiEnvelope<Any>

    // 用户提交反馈信息
    @POST("/api/proxy/info")
    suspend fun onProxyCheck(@Body params: Map<String, String>): ApiEnvelope<ProxyCheckResp>

    // 获取登录认证信息
    @GET("/api/facebook/getAccountAuthInfo")
    suspend fun getAccountAuthInfo(@Query("token") params: String): ApiEnvelope<AccountAuthInfo>

    // 单个用户（直接返回数据 T）
    @GET("users/{id}")
    suspend fun getUserDirect(@Path("id") id: Long): User

    // 用户列表（直接返回 List<T>）
    @GET("users")
    suspend fun getUsersDirect(): List<User>

    // 创建（直接返回后端返回的对象）
    @POST("users")
    suspend fun createUserDirect(@Body req: CreateUserRequest): Any

    // 通用文件下载（直接返回 ResponseBody，支持大文件流式传输）
    @GET
    @Streaming
    suspend fun downloadFile(@Url url: String): Response<ResponseBody>

}